package com.ai.service.impl;

import org.springframework.ai.document.Document;
import org.springframework.ai.reader.TextReader;
import org.springframework.ai.reader.tika.TikaDocumentReader;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * 文档解析服务
 */
@Service
public class DocumentParserService {
    /**
     * 解析上传的 MultipartFile 文件
     * @param file 上传的文件
     * @return 提取出的文本内容字符串
     */
    public String parseMultipartFile(MultipartFile file) throws IOException {
        // 将 MultipartFile 转换为 Spring 的 Resource 对象
        Resource resource = new InputStreamResource(file.getInputStream());
        // 创建 TikaDocumentReader 并读取文档
        List<Document> documents = new TikaDocumentReader(resource).get();

        // 假设我们只关心第一个文档的内容,对于单文件上传（可根据实际情况遍历处理）
        return !documents.isEmpty() ? documents.getFirst().getText() : "";

    }

    /**
     * 解析本地文件系统中的文件
     * @param filePath 本地文件路径
     * @return 提取出的文本内容字符串
     */
    public String parseLocalFile(String filePath) {
        Resource resource = new FileSystemResource(filePath);
        List<Document> documents = new TikaDocumentReader(resource).get();
        return documents.getFirst().getText();
    }

    /**
     * 解析网络文件
     * @param fileUrl 文件的 URL 地址
     * @return 提取出的文本内容字符串
     */
    public String parseNetworkFile(String fileUrl) throws Exception {
        Resource resource = new UrlResource(fileUrl);
        List<Document> documents = new TikaDocumentReader(resource).get();
        return documents.getFirst().getText();
    }


    /**
     * 解析文件并返回完整的 Document 列表（包含元数据）
     * @param file 上传的文件
     * @return Document 列表
     * @throws IOException E
     */
    public List<Document> parseMultipartFileToDocuments(MultipartFile file) throws IOException {

        //TextReader textReader = new TextReader(file.getResource());
        //List<Document> documents = textReader.get();

        Resource resource = new InputStreamResource(file.getInputStream());
        TikaDocumentReader reader = new TikaDocumentReader(resource);
        return reader.get();
    }

}
